package com.zoe.onelink.enhancer.init;

import org.springframework.boot.context.event.ApplicationStartedEvent;

/**
 * <p>标题: 程序启动时初始化</p>
 * <p>描述: </p>
 * <p>版权: Copyright (c) 2021</p>
 * <p>公司: 智业软件股份有限公司</p>
 *
 * @version: 1.0
 * @author: ruansheng
 * @date: 2021-12-02
 */
public interface ApplicationInitializer {


    /**
     * 是否异步
     */
    default boolean isAsync() {
        return false;
    }

    /**
     * 要执行初始化之前的判断逻辑
     *
     * @param event 容器事件
     * @return , true为执行 , false 不执行
     */
    default boolean preInit(ApplicationStartedEvent event) {
        return true;
    }

    /**
     * 执行顺序(值越小优先级越高)
     *
     * @return 默认优先级为0
     */
    default int getOrderIndex() {
        return 0;
    }

    /**
     * 事件名,用于描述当前初始化的动作,可以为空
     */
    default String eventName() {
        return null;
    }

    /**
     * 是否可以抛出异常
     *
     * @return true = 初始化发生异常会中断程序的启动 , false = 初始化发生异常不会中断程序的启动
     */
    default boolean throwable() {
        return true;
    }

    /**
     * 初始化逻辑
     *
     * @param event 容器事件
     * @throws Exception 初始化时发生的异常
     */
    void init(ApplicationStartedEvent event) throws Exception;

}
